/**
 * 获取用户登录IP地址
 * @param {Object} req - Express请求对象
 * @returns {string} 格式化后的IP地址，默认返回空字符串
 */
export const getIp = (req) =>{
  
  // 优先级从高到低获取可能的IP来源
  const ipSources = [
    req.headers['x-forwarded-for'],  // 代理场景下的真实IP（可能多个，逗号分隔）
    req.headers['x-real-ip'],       // 部分代理服务器使用
    req.ip,                         // Express内置的IP获取（已处理代理）
    req.connection?.remoteAddress,  // 底层连接的远程地址
    req.socket?.remoteAddress,      // 套接字的远程地址
    req.connection?.socket?.remoteAddress  // 连接套接字的远程地址
  ];

  // 从来源中找到第一个有效IP字符串
  let ip = ipSources.find(source => typeof source === 'string' && source.trim() !== '');
  
  // 若未找到有效IP，直接返回空
  if (!ip) return '';

  // 处理多IP情况（取第一个）
  ip = ip.split(',').shift().trim();

  // IPv6转IPv4处理
  if (ip === '::1') {
    return '127.0.0.1';  // 本地环回地址
  }
  if (ip.startsWith('::ffff:')) {
    return ip.slice(7);  // 去除IPv6映射的IPv4前缀
  }

  return ip;
}
